package com.xiaotu.common.util;

import java.util.Date;

import com.xiaotu.common.model.*;
import org.apache.commons.lang.StringUtils;

/**
 * @类名 RedisKeyUtils
 * @日期 2017年2月8日
 * @作者 高海军
 * @功能 采集数据换成key的帮助类
 */
public class DataRedisKeyUtils
{
    private static final int CONTENT_PRE_LENGTH = 10;

    public static String getKey(Constants.DataRedisKey key)
    {
        return getKey(key, new Date());
    }

    public static String getKey(Constants.DataRedisKey key, Date date)
    {
        if (date == null)
            date = new Date();
        String k = key.toString();
        if (k.endsWith("YYYYMMDD"))
            return k.replace("YYYYMMDD",
                    DateUtils.fomartDateToString(date, "yyyyMMdd"));
        return k;
    }

    public static String getCorrectKey(String taskType)
    {
        String[] key = getKey(Constants.DataRedisKey.CORRECT_YYYYMMDD,
                new Date()).split(SepratorUtil.SEP_UNDERLINE);
        return key[0] + SepratorUtil.SEP_UNDERLINE + taskType
                + SepratorUtil.SEP_UNDERLINE + key[1];
    }

    /**
     * 生成百度新闻数据唯一标识
     *
     * @param news 百度数据
     * @return 唯一标识
     */
    public static String getBaiduNewsKey(NewsModel news)
    {
        return news.getType() + SepratorUtil.SEP_UNDERLINE + news.getId() + SepratorUtil
                .SEP_UNDERLINE + news.getUrl();
    }


    /**
     * 生成作品分集梗概的唯一标识
     *
     * @param setModel 分集梗概实例
     * @return 唯一标识
     */
    public static String getTVSetPlotsKey(TVSetsPlotModel setModel)
    {
        return setModel.getTvId() + SepratorUtil.SEP_UNDERLINE
                + setModel.getSetsNo();
    }

    /**
     * 生成作品过程数据的唯一标识
     *
     * @param record 过程数据
     * @return 唯一标识
     */
    public static String getTVRecordKey(TVRecordModel record)
    {
        return record.getTvId() + SepratorUtil.SEP_UNDERLINE
                + record.getResourceSiteId();
    }

    /**
     * 生成网络热剧唯一标识
     *
     * @param hotTV 热剧
     * @return 唯一标识
     */
    public static String getHotTVKey(HotTVModel hotTV)
    {
        return hotTV.getResourceSiteId() + SepratorUtil.SEP_UNDERLINE
                + hotTV.getTvName();
    }

    /**
     * 生成网络红人唯一标识
     *
     * @param star 热剧
     * @return 唯一标识
     */
    public static String getHotStarKey(StarHotModel star)
    {
        return star.getResourceSiteId() + SepratorUtil.SEP_UNDERLINE
                + star.getName() + SepratorUtil.SEP_UNDERLINE + star.getSex();
    }

    /**
     * 生成艺人天涯数据唯一标识
     *
     * @param star 艺人天涯数据
     * @return 唯一标识
     */
    public static String getStarTianYaKey(StarTianYaModel star)
    {
        return star.getStarId() + SepratorUtil.SEP_UNDERLINE + star.getTitle()
                + SepratorUtil.SEP_UNDERLINE + star.getPubDate();
    }

    /**
     * 生成作品天涯数据唯一标识
     *
     * @param tv 作品天涯数据
     * @return 唯一标识
     */
    public static String getTVTianYaKey(TVTianYaModel tv)
    {
        return tv.getTvId() + SepratorUtil.SEP_UNDERLINE + tv.getTitle()
                + SepratorUtil.SEP_UNDERLINE + tv.getPubDate();
    }

    /**
     * 生成评论的唯一标识
     *
     * @param comment 评论数据
     * @return 唯一标识
     */
    public static String getTVPubCommentKey(TVPubCommentModel comment)
    {
        String date = RegexUtils.regexSearch("(\\d{4})-(\\d{2})-(\\d{2})",
                comment.getCommentDate());
        if (StringUtils.isEmpty(date))
            return null;
        int preLen = comment.getContent().length() < CONTENT_PRE_LENGTH
                ? comment.getContent().length() : CONTENT_PRE_LENGTH;
        return comment.getTvId() + SepratorUtil.SEP_UNDERLINE
                + comment.getResourceSiteId() + SepratorUtil.SEP_UNDERLINE
                + comment.getCommentUser() + SepratorUtil.SEP_UNDERLINE + date
                + SepratorUtil.SEP_UNDERLINE
                + comment.getContent().substring(0, preLen);
    }

    /**
     * 生成专业影评的唯一标识
     *
     * @param comment 评论数据
     * @return 唯一标识
     */
    public static String getTVProCommentKey(ProfessionalCommentModel comment)
    {
        String date = RegexUtils.regexSearch("(\\d{4})-(\\d{2})-(\\d{2})",
                comment.getCommentdate());
        if (StringUtils.isEmpty(date))
            return null;
        return comment.getTvId() + SepratorUtil.SEP_UNDERLINE
                + comment.getResourcesiteid() + SepratorUtil.SEP_UNDERLINE
                + comment.getCommentuser() + SepratorUtil.SEP_UNDERLINE + date
                + SepratorUtil.SEP_UNDERLINE + comment.getTitle();
    }

    /**
     * 生成作品 爱奇艺 人物画像 唯一标识
     *
     * @param tvid     作品id
     * @param type     数据类型 index:指数 sex：性别分布 age:年龄分布 constellation：星座分布 edu：教育程度分布
     *                 interest：兴趣爱好分布 province：省份分布（分城贡献）
     * @param dataForm 数据来自哪里
     * @return 唯一标识
     */
    public static String getTVIQYFigureKey(String tvid, String type,
            String dataForm)
    {
        return tvid + SepratorUtil.SEP_UNDERLINE + dataForm
                + SepratorUtil.SEP_UNDERLINE + type;
    }

    /**
     * 获取网剧唯一标志
     *
     * @param tv 网剧实例
     * @return 唯一标识
     */
    public static String getNetTVKey(NetTVModel tv)
    {
        return tv.getResourceSiteId() + SepratorUtil.SEP_UNDERLINE + tv.getTvName()
                + SepratorUtil.SEP_UNDERLINE + tv.getYear();
    }

    /**
     * 获取作品分城贡献唯一标志
     *
     * @param tv 作品实例
     * @return 唯一标识
     */
    public static String getTVCityKey(TVCityModel tv)
    {
        return tv.getSiteDataId() + SepratorUtil.SEP_UNDERLINE + tv.getLabel();
    }

    /**
     * 获取微信数据唯一标识
     *
     * @param wx 微信数据
     * @return 唯一标志
     */
    public static String getSgWxKey(SgWxModel wx)
    {
        return wx.getTargetId() + SepratorUtil.SEP_UNDERLINE + wx.getTargetType() + SepratorUtil
                .SEP_UNDERLINE + wx.getTitle() + SepratorUtil.SEP_UNDERLINE + wx.getDate() +
                SepratorUtil.SEP_UNDERLINE + wx.getSource();
    }

    /**
     * 获取艺人奖项数据唯一标识
     *
     * @param award 奖项数据
     * @return 唯一标识
     */
    public static String getAwardKey(StarAwardModel award)
    {
        return award.getName() + SepratorUtil.SEP_UNDERLINE + award.getAwardMode() + SepratorUtil
                .SEP_UNDERLINE + award.getAwardType() + SepratorUtil.SEP_UNDERLINE + award
                .getAwardSection() + SepratorUtil.SEP_UNDERLINE + award.getAwardTitle() +
                SepratorUtil.SEP_UNDERLINE + award.getAwardWork() + SepratorUtil.SEP_UNDERLINE +
                award.getAwardRole() + SepratorUtil.SEP_UNDERLINE + award.getAwardTime();
    }
}
